Network-attached storage (NAS) appliances allow multiple computers to share data storage devices, while offloading management and administration of the storage to the appliance. General-purpose NAS appliances typically present a file-system interface, enabling computers to access data stored within the NAS in the same way that computers would access files on their own local storage.
A network-attached database storage appliance is a special type of NAS, used for storage and retrieval of record-oriented data accessed by a database management systems (DBMS) that typically supports applications such as accounting systems, records-management systems for medical, customer or employee files, etc. In such cases, the general-purpose file-system interface is replaced with a record-oriented interface, such as an application that supports one or more dialects of a structured query language (SQL). Because the unit of storage and retrieval is a record, rather than a file, a network-attached database storage appliance typically controls concurrent access to individual records when more than one client, application or user is requesting access to or updating the same record at the same time. In addition, the network-attached database storage appliance may also provide other management functions such as compression, encryption, mirroring and replication.
In many implementations, the database-processing functions (querying data, updating data, inserting new records, etc.) tend to require the most processing resources and take the most time to complete. This is especially true in large-scale applications in which terabytes or even petabytes of data are stored and manipulated. One approach for increasing the processing speed of such applications is the use of massively-parallel processing (“MPP”) architectures. MPP architectures utilize independent processors or servers (often referred to as “blades” or “nodes”) onto which data is distributed according to some allocation methodology. This distribution allows the individual nodes to collectively resolve a query by scanning data and executing the query on each node in parallel. This divide-and-conquer approach delivers high performance and scales linearly as new servers are added into the architecture.
However, it is not uncommon for a node to fail, in which case the data allocated to that node is unavailable. This results in incomplete and inaccurate retrieval results. One approach to ensuring that all the data remains available regardless of individual node failures is to maintain a copy of each node's data on one or more other nodes. While this technique may address the immediate challenge of providing accurate query results, it significantly degrades overall system performance. Consider, for example, an array of twenty nodes that store and process data according to an allocation scheme that guarantees optimal performance (e.g., each node is responsible for approximately 5% of the processing load). Using conventional redundancy techniques, if a node fails, another node will now be responsible for 10% of the processing load. Because MPP system performance is defined by the slowest node, overall system performance is halved.
What is needed, therefore, is a data redundancy/mirroring technique that maintains optimal system-wide performance in response to individual node failures.